package com.liu.yubi.manager;

import com.liu.yubi.common.ErrorCode;
import com.liu.yubi.constant.AIConstant;
import com.liu.yubi.exception.BusinessException;
import com.volcengine.ark.runtime.model.completion.chat.ChatCompletionRequest;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessage;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessageRole;
import com.volcengine.ark.runtime.service.ArkService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @author lqh
 * @since 2025-05-27 23:23
 * 调用AI（提供通用的方法 放在manager为了与service区别开来 这个可以放在任何项目中使用）
 */
@Component
@Slf4j
public class DBAiManager {

    public  String doChat(String content ){
        // 从环境变量中获取API密钥
        String apiKey = System.getenv("ARK_API_KEY");

        // 创建ArkService实例
        ArkService arkService = ArkService.builder().apiKey(apiKey).build();

        // 初始化消息列表
        List<ChatMessage> chatMessages = new ArrayList<> ();

        //AI角色预设（prompt）
        String aiPrompt = AIConstant.AI_PROMPT_TEMPLATE;
        // 创建用户消息(AI预设信息)
        ChatMessage userMessage = ChatMessage.builder()
                .role(ChatMessageRole.USER) // 设置消息角色为用户
                .content(aiPrompt) // 设置消息内容
                .build();
        // 将用户消息添加到消息列表
        chatMessages.add(userMessage);

        if (StringUtils.isEmpty (content)) {
            throw new BusinessException (ErrorCode.PARAMS_ERROR,"AI请求参数不能为空");
        }
        //创建用户消息（请求消息）
        ChatMessage input = ChatMessage.builder ()
                .role (ChatMessageRole.USER)
                .content (content)
                .build ();
        //将请求信息添加到消息列表
        chatMessages.add (input);

        // 创建聊天完成请求
        ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
                .model("doubao-1.5-pro-32k-250115")// 需要替换为Model ID
                .messages(chatMessages) // 设置消息列表
                .build();
        //收集AI响应信息
        StringBuilder AIResponse = new StringBuilder ();
        // 发送聊天完成请求并打印响应
        try {
            // 获取响应并打印每个选择的消息内容
            arkService.createChatCompletion(chatCompletionRequest)
                    .getChoices()
                    .forEach(choice ->{
                                AIResponse.append(choice.getMessage().getContent());
                            }
                            );
        } catch (Exception e) {
            log.error ("请求失败{}",e.getMessage ());
        } finally {
            // 关闭服务执行器
            arkService.shutdownExecutor();
        }
        //打印响应日志
        log.info ("AI响应结果==>{}",AIResponse);
        return AIResponse.toString();
    }

//    public static void main(String[] args) {
//        String dataRequest = "分析目标:" + "\n" +
//                "分析网站用户的增长趋势" + "\n" +
//                "原始数据:" + "\n" +
//                "日期，人数，1号，20,2号，17,3号，34，4号60,5号，10";
//        DBAiManager dbAiManager = new DBAiManager ();
//        System.out.println (dbAiManager.doChat (dataRequest));
//
//    }
}
